home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Games / WormWars / Source / same.h < prev    next >
C/C++ Source or Header  |  2002-10-21  |  27KB  |  832 lines

  1. /* $Filename:    WormWars/Source/same.h
  2.  * $VER:         WormWars 7.21a
  3.  * $Description: Header file for Worm Wars
  4.  *
  5.  * © Copyright 2002 James R. Jacobs.
  6.  
  7. SAME ON EACH PLATFORM -------------------------------------------------- */
  8.  
  9. #define elif         else if
  10. #define AGLOBAL      ;       /* global (project-scope) */
  11. #define MODULE       static  /* external static (file-scope) */
  12. #define PERSIST      static  /* internal static (function-scope) */
  13. #define AUTO         auto    /* automatic (function-scope) */
  14.  
  15. /* miscellaneous */
  16.  
  17. #define CAUSEWAIT      100
  18. #define DATELENGTH       8 /* DD/MM/YY */
  19. #define TIMELENGTH       5 /* HH:MM */
  20. #define DEFAULTLEVELS    5
  21. #define HISCORES         4
  22. #define LIFEMODULO    1000
  23. #define MAXLEVELS       50 /* assert (MAXLEVELS >= 1 && MAXLEVELS <= 99); */
  24. #define NAMELENGTH      21 /* 0..20 are TEXT, 21 is NULL */
  25. #define NOMODE           0
  26. #define NUMKEYS         28
  27. #define PATIENCE       100
  28. #define SAYLIMIT      ((ENDXPIXEL - STARTXPIXEL) / FONTX)
  29. #define VERSION       "$VER: Worm Wars 7.21a (21.10.2002)" // always d.m.y format
  30. #define HISCORESIZE   (6 + NAMELENGTH + 1 + DATELENGTH + 1 + TIMELENGTH + 1)
  31.  
  32. #define IBMFIELDX       57
  33. #define AMIGAFIELDX     44
  34. #ifdef PLATFORM_AMIGA
  35.     #define FIELDX      AMIGAFIELDX
  36. #endif
  37. #ifdef PLATFORM_IBM
  38.     #define FIELDX      IBMFIELDX
  39. #endif
  40. #define FIELDY          39 /* in squares */
  41. #define LEVELSIZE       ((AMIGAFIELDX + 1) * (FIELDY + 1))
  42. #define ARROWX          (FIELDX + 1)
  43. #define CENTREX         (FIELDX / 2)
  44. #define CENTREY         (FIELDY / 2)
  45. #define ENDXPIXEL       ((STARTXPIXEL + SQUAREX * (FIELDX + 1)) - 1)
  46. #define ENDYPIXEL       ((STARTYPIXEL + SQUAREY * (FIELDY + 1)) - 1)
  47.  
  48. #define BONUS_TAIL     1
  49. #define BONUS_TIME    10
  50. #define BONUS_NUMBER  50
  51. #define BONUS_LEVEL  100
  52.  
  53. /* samples */
  54.  
  55. #define FXBORN_DOG        0
  56. #define FXBORN_DRIP       1
  57. #define FXBORN_GOAT       2
  58. #define FXBORN_MISSILE    3
  59. #define FXBORN_ORB        4
  60. #define FXBORN_PENGUIN    5
  61. #define FXBORN_PROTECTOR  6
  62. #define FXDEATH_FRAGMENT  7 // thud
  63. #define FXDEATH_WORM      8
  64. #define FXDO_BOMB         9 // tick
  65. #define FXDO_ENCLOSE     10
  66. #define FXDO_GOAT        11 // fire
  67. #define FXDO_JUMP        12
  68. #define FXDO_ORB         13 // split
  69. #define FXGET_AMMO       14
  70. #define FXGET_CYCLONE    15
  71. #define FXGET_DRIP       16
  72. #define FXGET_GROWER     17
  73. #define FXGET_OBJECT     18
  74. #define FXGET_POWERUP    19
  75. #define FXGET_PULSE      20 // explode
  76. #define FXGET_SKULL      21
  77. #define FXHELP           22
  78. #define FXUSE_AMMO       23
  79. #define FXUSE_ARMOUR     24
  80. #define FXUSE_BOMB       25
  81. #define FXUSE_TELEPORT   26
  82. #define FXBORN_BIRD      27
  83. #define FXPAIN           28 // 28, 29, 30, 31
  84. #define FXAPPLAUSE       32 // after each new hiscore
  85. #define FXGAMEOVER       33 // if all worms are dead
  86. #define FXCELEBRATE      34 // if game succeeded
  87. #define FXCLICK          35 // rundown, keypresses
  88. #define FXLAUNCH         36 // title screen
  89. #define FXRIFF           37 // after each rundown
  90. #define FXSIREN          38 // out of time
  91. #define SAMPLES          FXSIREN
  92. #define FXCENTRE         FXUSE_TELEPORT
  93. #define FXDO_CLOUD       FXDO_GOAT
  94. #define FXFX             FXLAUNCH
  95. #define FXRUNDOWN        FXCLICK
  96. #define FXUSE_PROTECTOR  FXBORN_PROTECTOR
  97.  
  98. #define PAIN_BIRD         3
  99. #define PAIN_BOMB         3
  100. #define PAIN_CLOUD        3
  101. #define PAIN_DOG          5
  102. #define PAIN_DRIP         5
  103. #define PAIN_FISH         2
  104. #define PAIN_FRAGMENT     3
  105. #define PAIN_GIRAFFE      3
  106. #define PAIN_GOAT         2
  107. #define PAIN_GLOW         4
  108. #define PAIN_HEAD         5
  109. #define PAIN_LIGHTNING    3
  110. #define PAIN_LION         5
  111. #define PAIN_METAL        3
  112. #define PAIN_MISSILE      5
  113. #define PAIN_OCTOPUS      5
  114. #define PAIN_ORB          5
  115. #define PAIN_OTTER        5
  116. #define PAIN_PENGUIN      3
  117. #define PAIN_PROTECTOR    5
  118. #define PAIN_SLAYER       2
  119. #define PAIN_SLIME        2
  120. #define PAIN_STONE        2
  121. #define PAIN_TELEPORT     5
  122. #define PAIN_WHIRLWIND    5
  123. #define PAIN_WORMFIRE     5
  124. #define PAIN_WOOD         2
  125. #define PAIN_ENEMYTAIL    3
  126. #define PAIN_FRIENDLYTAIL 2
  127.  
  128. #define SCORE_BIRD          40
  129. #define SCORE_CLOUD         20
  130. #define SCORE_FRAGMENT      10
  131. #define SCORE_DOG           20
  132. #define SCORE_DRIP         100
  133. #define SCORE_FISH          20
  134. #define SCORE_GIRAFFE       40
  135. #define SCORE_GOAT          50
  136. #define SCORE_LION          50
  137. #define SCORE_MISSILE       50
  138. #define SCORE_OCTOPUS       60
  139. #define SCORE_ORB           40
  140. #define SCORE_OTTER        150
  141. #define SCORE_PENGUIN       20
  142. #define SCORE_TIMEBOMB     100
  143. #define SCORE_WHIRLWIND    100
  144.  
  145. /* key types */
  146.  
  147. #define MOVE              0 /* not AMMO, TRAINER, ONEHUMAN */
  148. #define TRAINER           2 /* not MOVE, AMMO, ONEHUMAN */
  149. #define ONEHUMAN          3 /* not MOVE, AMMO, TRAINER */
  150.  
  151. /* speeds */
  152.  
  153. #define VERYFAST          1
  154. #define FAST              2
  155. #define NORMAL            4
  156. #define SLOW              8
  157. #define VERYSLOW         16 /* must be non-0 */
  158.  
  159. /* The constant NORMAL is used for several purposes:
  160.     a)  as a speed (therefore must not be VERYFAST, FAST, SLOW
  161.         or VERYSLOW);
  162.     b)  as a blitmode (therefore must not be BLACK or WHITE); and
  163.     c)  as a pointer (therefore must not be anything that can be
  164.         a brush).
  165.  
  166. stats */
  167.  
  168. #define AMMOLIMIT       100
  169. #define ARMOURLIMIT     100
  170. #define BIASLIMIT       100
  171. #define GLOWLIMIT       100
  172. #define STARTLIVES      100
  173. #define LIVESLIMIT      200
  174. #define MULTILIMIT        8 /* don't set >8! */
  175. #define POWERLIMIT        6
  176. #define SCORELIMIT 99999999 // 99 million
  177.  
  178. /* Field values...
  179. These are objects. */
  180.     #define AFFIXER              0
  181.     #define AMMO                 1
  182.     #define ARMOUR               2
  183.     #define BIAS                 3
  184.     #define BOMB                 4
  185.     #define BONUS                5
  186.     #define BRAKES               6
  187.     #define CLOCK                7
  188.     #define CONVERTER            8
  189.     #define CUTTER               9
  190.     #define CYCLONE             10
  191.     #define ENCLOSER            11
  192.     #define GLOW                12
  193.     #define GROWER              13
  194.     #define HEALER              14
  195.     #define ICE                 15
  196.     #define LIFE                16
  197.     #define LIGHTNING           17
  198.     #define MAGNET              18
  199.     #define MISSILE             19
  200.     #define MULTIPLIER          20
  201.     #define POWER               21
  202.     #define PROTECTOR           22
  203.     #define PULSE               23
  204.     #define PUSHER              24
  205.     #define REMNANTS            25
  206.     #define SIDESHOT            26
  207.     #define SLAYER              27
  208.     #define SLOWER              28
  209.     #define SWITCHER            29
  210.     #define TREASURE            30
  211.     #define UMBRELLA            31
  212.     #define LASTOBJECT          UMBRELLA
  213. /* These are `empty'. */
  214.     #define EMPTY               (LASTOBJECT + 1)
  215.     #define SILVER              (LASTOBJECT + 2)
  216.     #define GOLD                (LASTOBJECT + 3)
  217.     #define FIRSTEMPTY          EMPTY
  218.     #define LASTEMPTY           GOLD
  219.     #define LASTGOATFIRE        LASTEMPTY
  220. /* Nothing special about the following... */
  221.     #define TELEPORT            (GOLD + 1)
  222.     #define FRAGMENT            (GOLD + 2)
  223.     #define ORB                 (GOLD + 3)
  224.     #define FIRSTPROTECTOR      (GOLD + 4)
  225.     #define LASTPROTECTOR       (GOLD + 7)
  226.         #define NUM_1                           (GOLD +  8)      
  227.         #define NUM_9                           (GOLD + 16)             /* n g */
  228.         #define SLIME                           (GOLD + 17)             /*   [ */
  229.         #define STONE                           (GOLD + 18)             /* [ | */
  230.         #define GOAT                            (GOLD + 19)             /* ] | */
  231.         #define WOOD                            (GOLD + 20)             /*   | */
  232.         #define FIRSTTAIL                       (GOLD + 21)             /*   | */
  233.         #define LASTTAIL                        (GOLD + 24)             /*   ] */
  234.         #define FIRSTLETTER        NUM_1
  235.         #define LASTLETTER         NUM_9
  236.         #define LASTNONE           LASTTAIL
  237.         #define LETTERS            (LASTLETTER - FIRSTLETTER)
  238.         #define FISH               (LASTTAIL +  1)
  239.         #define OTTER              (LASTTAIL +  2)
  240.         #define FIRSTFIRE          (LASTTAIL +  3)
  241.         #define LASTFIRE           (LASTTAIL +  6)
  242.         #define FIRSTMISSILE       (LASTTAIL +  7)
  243.         #define LASTMISSILE        (LASTTAIL + 10)
  244.         #define START              (LASTTAIL + 11)
  245.         #define MUSIC              (LASTTAIL + 12)
  246.         #define FX                 (LASTTAIL + 13)
  247.         #define ZERO               (LASTTAIL + 14)
  248.         #define TIMEBOMB            ZERO
  249.         #define       HEAD         (ZERO + 10)
  250.         #define  GREENHEADUP        HEAD
  251.         #define    REDHEADUP       (HEAD +  1)
  252.         #define   BLUEHEADUP       (HEAD +  2)
  253.         #define YELLOWHEADUP       (HEAD +  3)
  254.         #define  FIRSTHEAD         GREENHEADUP
  255.         #define   LASTHEAD         YELLOWHEADUP
  256.         #define  GREENHEADDOWN     (HEAD +  4)
  257.         #define    REDHEADDOWN     (HEAD +  5)
  258.         #define   BLUEHEADDOWN     (HEAD +  6)
  259.         #define YELLOWHEADDOWN     (HEAD +  7)
  260.         #define  GREENHEADLEFT     (HEAD +  8)
  261.         #define    REDHEADLEFT     (HEAD +  9)
  262.         #define   BLUEHEADLEFT     (HEAD + 10)
  263.         #define YELLOWHEADLEFT     (HEAD + 11)
  264.         #define  GREENHEADRIGHT    (HEAD + 12)
  265.         #define    REDHEADRIGHT    (HEAD + 13)
  266.         #define   BLUEHEADRIGHT    (HEAD + 14)
  267.         #define YELLOWHEADRIGHT    (HEAD + 15)
  268.         #define  GREENGLOWUP       (HEAD + 16)
  269.         #define    REDGLOWUP       (HEAD + 17)
  270.         #define   BLUEGLOWUP       (HEAD + 18)
  271.         #define YELLOWGLOWUP       (HEAD + 19)
  272.         #define  GREENGLOWDOWN     (HEAD + 20)
  273.         #define    REDGLOWDOWN     (HEAD + 21)
  274.         #define   BLUEGLOWDOWN     (HEAD + 22)
  275.         #define YELLOWGLOWDOWN     (HEAD + 23)
  276.         #define  GREENGLOWLEFT     (HEAD + 24)
  277.         #define    REDGLOWLEFT     (HEAD + 25)
  278.         #define   BLUEGLOWLEFT     (HEAD + 26)
  279.         #define YELLOWGLOWLEFT     (HEAD + 27)
  280.         #define  GREENGLOWRIGHT    (HEAD + 28)
  281.         #define    REDGLOWRIGHT    (HEAD + 29)
  282.         #define   BLUEGLOWRIGHT    (HEAD + 30)
  283.         #define YELLOWGLOWRIGHT    (HEAD + 31)
  284.         #define METAL              (HEAD + 32)
  285.         #define FIRSTDRIP          (HEAD + 33)
  286.         #define DRIP               FIRSTDRIP
  287.         #define LASTDRIP           (HEAD + 36)
  288.         #define BLACKENED          (HEAD + 37)
  289.         #define WHITENED           (HEAD + 38)
  290.         #define PENGUIN            (HEAD + 39)
  291.         #define WHIRLWIND          (HEAD + 40)
  292.         #define DOG                (HEAD + 41) /* dog chasing */
  293.         #define DOGAWAKENING       (HEAD + 42)
  294.         #define DOGDORMANT         (HEAD + 43)
  295.         #define CLOUD              (HEAD + 44)
  296.         #define ALL                (HEAD + 45)
  297.         #define FIRSTARROW         (HEAD + 46)
  298.         #define LASTARROW          (HEAD + 49)
  299.         #define DYNAMITE           (HEAD + 50)
  300.         #define OCTOPUS            (HEAD + 51)
  301.         #define FIRSTMISSILEFRAME  (HEAD + 52)
  302.         #define BIRD               (FIRSTMISSILEFRAME + 20)
  303.         #define FIRSTGLOW          (BIRD +  5)
  304.         #define LASTGLOW           (BIRD +  8)
  305.         #define FIRSTGRAVE         (BIRD +  9)
  306.         #define LASTGRAVE          (BIRD + 12)
  307.         #define FIRSTPAIN          (BIRD + 13)
  308.         #define LASTPAIN           (BIRD + 16)
  309.     #define GREENHEAD_NW           (LASTPAIN +  1)
  310.     #define GREENHEAD_NE           (LASTPAIN +  2)
  311.     #define GREENHEAD_SW           (LASTPAIN +  3)
  312.     #define GREENHEAD_SE           (LASTPAIN +  4)
  313.     #define GREENGLOW_NW           (LASTPAIN +  5)
  314.     #define GREENGLOW_NE           (LASTPAIN +  6)
  315.     #define GREENGLOW_SW           (LASTPAIN +  7)
  316.     #define GREENGLOW_SE           (LASTPAIN +  8)
  317.     #define REDHEAD_NW             (LASTPAIN +  9)
  318.     #define REDHEAD_NE             (LASTPAIN + 10)
  319.     #define REDHEAD_SW             (LASTPAIN + 11)
  320.     #define REDHEAD_SE             (LASTPAIN + 12)
  321.     #define REDGLOW_NW             (LASTPAIN + 13)
  322.     #define REDGLOW_NE             (LASTPAIN + 14)
  323.     #define REDGLOW_SW             (LASTPAIN + 15)
  324.     #define REDGLOW_SE             (LASTPAIN + 16)
  325.     #define BLUEHEAD_NW            (LASTPAIN + 17)
  326.     #define BLUEHEAD_NE            (LASTPAIN + 18)
  327.     #define BLUEHEAD_SW            (LASTPAIN + 19)
  328.     #define BLUEHEAD_SE            (LASTPAIN + 20)
  329.     #define BLUEGLOW_NW            (LASTPAIN + 21)
  330.     #define BLUEGLOW_NE            (LASTPAIN + 22)
  331.     #define BLUEGLOW_SW            (LASTPAIN + 23)
  332.     #define BLUEGLOW_SE            (LASTPAIN + 24)
  333.     #define YELLOWHEAD_NW          (LASTPAIN + 25)
  334.     #define YELLOWHEAD_NE          (LASTPAIN + 26)
  335.     #define YELLOWHEAD_SW          (LASTPAIN + 27)
  336.     #define YELLOWHEAD_SE          (LASTPAIN + 28)
  337.     #define YELLOWGLOW_NW          (LASTPAIN + 29)
  338.     #define YELLOWGLOW_NE          (LASTPAIN + 30)
  339.     #define YELLOWGLOW_SW          (LASTPAIN + 31)
  340.     #define YELLOWGLOW_SE          (LASTPAIN + 32)
  341.         #define GIRAFFE            (LASTPAIN + 33)
  342.         #define LION               (LASTPAIN + 34)
  343.         #define BLACKARROW         (LASTPAIN + 35)
  344.         #define ARROWUP            (LASTPAIN + 36)
  345.         #define ARROWDOWN          (LASTPAIN + 37)
  346.         #define FROST              (LASTPAIN + 38)
  347.         #define ARRAYSIZE          FROST
  348.         #define ANYTHING           STONE // should be something that is valid field contents
  349.  
  350. /* These have no imagery. */
  351.         #define TEMPTAIL         (ARRAYSIZE + 1)
  352.         #define TEMPWOOD         TEMPTAIL
  353.         #define TEMPSLIME        TEMPTAIL
  354.         #define TEMPLIGHTNING    TEMPTAIL
  355.         #define TEMPSILVER       (ARRAYSIZE + 2)
  356.         #define TEMPGOLD         (ARRAYSIZE + 3)
  357.         #define NOSQUARE         (ARRAYSIZE + 4)
  358.         #define BANGDYNAMITE     (ARRAYSIZE + 5)
  359.         #define TEMPBANGDYNAMITE (ARRAYSIZE + 6)
  360.         #define TEMPDYNAMITE     (ARRAYSIZE + 7)
  361.  
  362. // tails
  363.     #define GN_E_NE  0
  364.     #define GN_NE_E  GN_E_NE
  365.     #define GN_E_S   1
  366.     #define GN_S_E   GN_E_S
  367.     #define GN_E_SE  2
  368.     #define GN_SE_E  GN_E_SE
  369.     #define GN_NE_SE 3
  370.     #define GN_SE_NE GN_NE_SE
  371.     #define GN_NE_SW 4
  372.     #define GN_SW_NE GN_NE_SW
  373.     #define GN_NW_E  5
  374.     #define GN_E_NW  GN_NW_E
  375.     #define GN_NW_NE 6
  376.     #define GN_NE_NW GN_NW_NE
  377.     #define GN_NW_SE 7
  378.     #define GN_SE_NW GN_NW_SE
  379.     #define GN_NW_SW 8
  380.     #define GN_SW_NW GN_NW_SW
  381.     #define GN_N_E   9
  382.     #define GN_E_N   GN_N_E
  383.     #define GN_N_NE  10
  384.     #define GN_NE_N  GN_N_NE
  385.     #define GN_N_NW  11
  386.     #define GN_NW_N  GN_N_NW
  387.     #define GN_N_S   12
  388.     #define GN_S_N   GN_N_S
  389.     #define GN_N_SE  13
  390.     #define GN_SE_N  GN_N_SE
  391.     #define GN_N_SW  14
  392.     #define GN_SW_N  GN_N_SW
  393.     #define GN_N_W   15
  394.     #define GN_W_N   GN_N_W
  395.     #define GN_SW_E  16
  396.     #define GN_E_SW  GN_SW_E
  397.     #define GN_SW_SE 17
  398.     #define GN_SE_SW GN_SW_SE
  399.     #define GN_S_NE  18
  400.     #define GN_NE_S  GN_S_NE
  401.     #define GN_S_NW  19
  402.     #define GN_NW_S  GN_S_NW
  403.     #define GN_S_SE  20
  404.     #define GN_SE_S  GN_S_SE
  405.     #define GN_S_SW  21
  406.     #define GN_SW_S  GN_S_SW
  407.     #define GN_W_E   22
  408.     #define GN_E_W   GN_W_E
  409.     #define GN_W_NE  23
  410.     #define GN_NE_W  GN_W_NE
  411.     #define GN_NW_W  24
  412.     #define GN_W_NW  GN_NW_W
  413.     #define GN_W_S   25
  414.     #define GN_S_W   GN_W_S
  415.     #define GN_W_SE  26
  416.     #define GN_SE_W  GN_W_SE 
  417.     #define GN_W_SW  27
  418.     #define GN_SW_W  GN_W_SW
  419.     #define GG_NE_E  28
  420.     #define GG_E_NE  GG_NE_E
  421.     #define GG_NE_S  29
  422.     #define GG_S_NE  GG_NE_S
  423.     #define GG_NE_W  30
  424.     #define GG_W_NE  GG_NE_W
  425.     #define GG_NW_E  31
  426.     #define GG_E_NW  GG_NW_E
  427.     #define GG_NW_NE 32
  428.     #define GG_NE_NW GG_NW_NE
  429.     #define GG_NW_S  33
  430.     #define GG_S_NW  GG_NW_S
  431.     #define GG_NW_SE 34
  432.     #define GG_SE_NW GG_NW_SE
  433.     #define GG_NW_SW 35
  434.     #define GG_SW_NW GG_NW_SW
  435.     #define GG_NW_W  36
  436.     #define GG_W_NW  GG_NW_W
  437.     #define GG_N_E   37
  438.     #define GG_E_N   GG_N_E
  439.     #define GG_N_NE  38
  440.     #define GG_NE_N  GG_N_NE
  441.     #define GG_N_NW  39
  442.     #define GG_NW_N  GG_N_NW
  443.     #define GG_N_S   40
  444.     #define GG_S_N   GG_N_S
  445.     #define GG_SE_E  41
  446.     #define GG_E_SE  GG_SE_E
  447.     #define GG_SE_N  42
  448.     #define GG_N_SE  GG_SE_N
  449.     #define GG_SE_W  43
  450.     #define GG_W_SE  GG_SE_W
  451.     #define GG_SW_E  44
  452.     #define GG_E_SW  GG_SW_E
  453.     #define GG_SW_N  45
  454.     #define GG_N_SW  GG_SW_N
  455.     #define GG_SW_NE 46
  456.     #define GG_NE_SW GG_SW_NE
  457.     #define GG_SW_SE 47
  458.     #define GG_SE_SW GG_SW_SE
  459.     #define GG_SW_W  48
  460.     #define GG_W_SW  GG_SW_W
  461.     #define GG_S_E   49
  462.     #define GG_E_S   GG_S_E
  463.     #define GG_S_SE  50
  464.     #define GG_SE_S  GG_S_SE
  465.     #define GG_S_SW  51
  466.     #define GG_SW_S  GG_S_SW
  467.     #define GG_W_E   52
  468.     #define GG_E_W   GG_W_E
  469.     #define GG_W_N   53
  470.     #define GG_N_W   GG_W_N
  471.     #define GG_W_S   54
  472.     #define GG_S_W   GG_W_S
  473.     #define GG_NE_SE 55
  474.     #define GG_SE_NE GG_NE_SE
  475.     #define RN_E_NE  56
  476.     #define RN_NE_E  RN_E_NE
  477.     #define RN_E_S   57
  478.     #define RN_S_E   RN_E_S
  479.     #define RN_E_SE  58
  480.     #define RN_SE_E  RN_E_SE
  481.     #define RN_NE_SE 59
  482.     #define RN_SE_NE RN_NE_SE
  483.     #define RN_NW_E  60
  484.     #define RN_E_NW  RN_NW_E
  485.     #define RN_NW_NE 61
  486.     #define RN_NE_NW RN_NW_NE
  487.     #define RN_NW_S  62
  488.     #define RN_S_NW  RN_NW_S
  489.     #define RN_NW_SE 63
  490.     #define RN_SE_NW RN_NW_SE
  491.     #define RN_NW_SW 64
  492.     #define RN_SW_NW RN_NW_SW
  493.     #define RN_N_E   65
  494.     #define RN_E_N   RN_N_E
  495.     #define RN_N_NE  66
  496.     #define RN_NE_N  RN_N_NE
  497.     #define RN_N_NW  67
  498.     #define RN_NW_N  RN_N_NW
  499.     #define RN_N_S   68
  500.     #define RN_S_N   RN_N_S
  501.     #define RN_N_SE  69
  502.     #define RN_SE_N  RN_N_SE
  503.     #define RN_N_W   70
  504.     #define RN_W_N   RN_N_W
  505.     #define RN_S_SE  71
  506.     #define RN_SE_S  RN_S_SE
  507.     #define RN_SW_E  72
  508.     #define RN_E_SW  RN_SW_E
  509.     #define RN_N_SW  73
  510.     #define RN_SW_N  RN_N_SW
  511.     #define RN_S_SW  74
  512.     #define RN_SW_S  RN_S_SW
  513.     #define RN_SW_SE 75
  514.     #define RN_SE_SW RN_SW_SE
  515.     #define RN_S_NE  76
  516.     #define RN_NE_S  RN_S_NE
  517.     #define RN_W_E   77
  518.     #define RN_E_W   RN_W_E
  519.     #define RN_W_NE  78
  520.     #define RN_NE_W  RN_W_NE
  521.     #define RN_NW_W  79
  522.     #define RN_W_NW  RN_NW_W
  523.     #define RN_W_S   80
  524.     #define RN_S_W   RN_W_S
  525.     #define RN_W_SE  81
  526.     #define RN_SE_W  RN_W_SE 
  527.     #define RN_W_SW  82
  528.     #define RN_SW_W  RN_W_SW
  529.     #define RN_NE_SW 83
  530.     #define RN_SW_NE RN_NE_SW
  531.     #define RG_E_S   84
  532.     #define RG_E_SW  85
  533.     #define RG_NE_E  86
  534.     #define RG_NE_N  87
  535.     #define RG_NE_S  88
  536.     #define RG_NE_SE 89
  537.     #define RG_NE_SW 90
  538.     #define RG_NE_W  91
  539.     #define RG_NW_E  92
  540.     #define RG_NW_N  93
  541.     #define RG_NW_NE 94
  542.     #define RG_NW_S  95
  543.     #define RG_NW_SE 96
  544.     #define RG_NW_SW 97
  545.     #define RG_NW_W  98
  546.     #define RG_N_E   99
  547.     #define RG_N_S   100
  548.     #define RG_N_SE  101
  549.     #define RG_N_SW  102
  550.     #define RG_N_W   103
  551.     #define RG_SE_E  104
  552.     #define RG_SE_S  105
  553.     #define RG_SW_S  106
  554.     #define RG_SW_SE 107
  555.     #define RG_SW_W  108
  556.     #define RG_W_E   109
  557.     #define RG_W_S   110
  558.     #define RG_W_SE  111
  559.     #define RG_S_E   84
  560.     #define RG_SW_E  85
  561.     #define RG_E_NE  86
  562.     #define RG_N_NE  87
  563.     #define RG_S_NE  88
  564.     #define RG_SE_NE 89
  565.     #define RG_SW_NE 90
  566.     #define RG_W_NE  91
  567.     #define RG_E_NW  92
  568.     #define RG_N_NW  93
  569.     #define RG_NE_NW 94
  570.     #define RG_S_NW  95
  571.     #define RG_SE_NW 96
  572.     #define RG_SW_NW 97
  573.     #define RG_W_NW  98
  574.     #define RG_E_N   99
  575.     #define RG_S_N   100
  576.     #define RG_SE_N  101
  577.     #define RG_SW_N  102
  578.     #define RG_W_N   103
  579.     #define RG_E_SE  104
  580.     #define RG_S_SE  105
  581.     #define RG_S_SW  106
  582.     #define RG_SE_SW 107
  583.     #define RG_W_SW  108
  584.     #define RG_E_W   109
  585.     #define RG_S_W   110
  586.     #define RG_SE_W  111
  587.     #define BN_E_NE  112
  588.     #define BN_E_S   113
  589.     #define BN_E_SE  114
  590.     #define BN_N_E   115
  591.     #define BN_N_NE  116
  592.     #define BN_N_NW  117
  593.     #define BN_N_S   118
  594.     #define BN_N_SE  119
  595.     #define BN_N_SW  120
  596.     #define BN_N_W   121
  597.     #define BN_NE_S  122
  598.     #define BN_NE_SE 123
  599.     #define BN_NE_SW 124
  600.     #define BN_NW_E  125
  601.     #define BN_NW_NE 126
  602.     #define BN_NW_S  127
  603.     #define BN_NW_SE 128
  604.     #define BN_NW_SW 129
  605.     #define BN_S_SE  130
  606.     #define BN_S_SW  131
  607.     #define BN_SW_E  132
  608.     #define BN_SW_SE 133
  609.     #define BN_W_E   134
  610.     #define BN_W_NE  135
  611.     #define BN_W_NW  136
  612.     #define BN_W_S   137
  613.     #define BN_W_SE  138
  614.     #define BN_W_SW  139
  615.     #define BG_E_S   140
  616.     #define BG_E_SE  141
  617.     #define BG_N_E   142
  618.     #define BG_N_NE  143
  619.     #define BG_N_NW  144
  620.     #define BG_N_S   145
  621.     #define BG_N_SE  146
  622.     #define BG_N_SW  147
  623.     #define BG_N_W   148
  624.     #define BG_NE_E  149
  625.     #define BG_NE_S  150
  626.     #define BG_NE_SE 151
  627.     #define BG_NE_SW 152
  628.     #define BG_NE_W  153
  629.     #define BG_NW_E  154
  630.     #define BG_NW_NE 155
  631.     #define BG_NW_S  156
  632.     #define BG_NW_SE 157
  633.     #define BG_NW_SW 158
  634.     #define BG_NW_W  159
  635.     #define BG_S_SE  160
  636.     #define BG_S_SW  161
  637.     #define BG_SW_E  162
  638.     #define BG_SW_SE 163
  639.     #define BG_W_E   164
  640.     #define BG_W_S   165
  641.     #define BG_W_SE  166
  642.     #define BG_W_SW  167
  643.     #define YN_E_SE  168
  644.     #define YN_E_SW  169
  645.     #define YN_N_E   170
  646.     #define YN_N_NE  171
  647.     #define YN_N_NW  172
  648.     #define YN_N_S   173
  649.     #define YN_N_SE  174
  650.     #define YN_N_SW  175
  651.     #define YN_N_W   176
  652.     #define YN_NE_E  177
  653.     #define YN_NE_S  178
  654.     #define YN_NE_SE 179
  655.     #define YN_NE_SW 180
  656.     #define YN_NW_E  181
  657.     #define YN_NW_NE 182
  658.     #define YN_NW_S  183
  659.     #define YN_NW_SE 184
  660.     #define YN_NW_SW 185
  661.     #define YN_NW_W  186
  662.     #define YN_S_E   187
  663.     #define YN_S_SE  188
  664.     #define YN_S_SW  189
  665.     #define YN_SW_SE 190
  666.     #define YN_W_E   191
  667.     #define YN_W_NE  192
  668.     #define YN_W_S   193
  669.     #define YN_W_SE  194
  670.     #define YN_W_SW  195
  671.     #define YG_E_N   196
  672.     #define YG_E_NE  197
  673.     #define YG_E_NW  198
  674.     #define YG_E_S   199
  675.     #define YG_E_SE  200
  676.     #define YG_E_SW  201
  677.     #define YG_N_NE  202
  678.     #define YG_N_NW  203
  679.     #define YG_N_S   204
  680.     #define YG_N_SE  205
  681.     #define YG_N_SW  206
  682.     #define YG_N_W   207
  683.     #define YG_NE_SE 208
  684.     #define YG_NE_SW 209
  685.     #define YG_NW_NE 210
  686.     #define YG_NW_SE 211
  687.     #define YG_NW_SW 212
  688.     #define YG_S_NE  213
  689.     #define YG_S_NW  214
  690.     #define YG_S_SE  215
  691.     #define YG_S_SW  216
  692.     #define YG_SW_SE 217
  693.     #define YG_W_E   218
  694.     #define YG_W_NE  219
  695.     #define YG_W_NW  220
  696.     #define YG_W_S   221 
  697.     #define YG_W_SE  222
  698.     #define YG_W_SW  223
  699.     #define WHATEVER 224
  700.     #define TAILARRAYSIZE WHATEVER
  701.  
  702. /* game status */
  703. #define GAMEOVER        0
  704. #define PLAYGAME        1               
  705. #define FIELDEDIT       2
  706. #define TITLESCREEN     3
  707.  
  708. /* indicator locations */
  709. #define ICONY           (-1)
  710. #define CLOCKICON       (FIELDX + 1)
  711. #define MUSICICON       (-1)
  712.  
  713. /* control values */
  714. #define NONE            0 /* must be 0 */
  715. #define AMIGA           1
  716. #define JOYSTICK        2
  717. #define GAMEPAD         3
  718. #define KEYBOARD        4
  719. #define IBMPC           AMIGA
  720.  
  721. #define MISSILEFRAMES 5
  722.  
  723. /* PROTOTYPES -------------------------------------------------------------
  724.  
  725. engine.c */
  726.  
  727. AGLOBAL void clearhiscores(void);
  728. AGLOBAL void enginesetup(void);
  729. AGLOBAL void gameloop(void);
  730. AGLOBAL void matchteleports(void);
  731. AGLOBAL void newfields(void);
  732. AGLOBAL void newgame(void);
  733. AGLOBAL void timeloop(void);
  734. AGLOBAL void newfield(void);
  735.  
  736. AGLOBAL void drawhead(SBYTE player, SBYTE x, SBYTE y);
  737. AGLOBAL void drawsquare(SBYTE x, SBYTE y);
  738. AGLOBAL void icon(SBYTE player, UBYTE image);
  739. AGLOBAL void saylevel(COLOUR colour);
  740. AGLOBAL void train(SCANCODE scancode);
  741. AGLOBAL void wormqueue(SBYTE player, SBYTE deltax, SBYTE deltay);
  742. AGLOBAL void wormscore(SBYTE player, ULONG score);
  743.  
  744. AGLOBAL SBYTE loadfields(STRPTR pathname);
  745. AGLOBAL SBYTE partner(SBYTE which);
  746. AGLOBAL ABOOL savefields(STRPTR pathname);
  747. AGLOBAL SBYTE valid(SBYTE x, SBYTE y);
  748. AGLOBAL SBYTE xwrap(SBYTE x);
  749. AGLOBAL SBYTE ywrap(SBYTE y);
  750. AGLOBAL void align(STRPTR string, SBYTE size, TEXT filler)
  751.  
  752. /* system.c */
  753.  
  754. AGLOBAL void celebrate(void);
  755. AGLOBAL void clearkybd(void);
  756. AGLOBAL void clearscreen(void);
  757. AGLOBAL void datestamp(void);
  758. AGLOBAL void gameinput(void);
  759. AGLOBAL void hiscores(void);
  760. AGLOBAL void resettime(void);
  761. AGLOBAL void systemsetup(void);
  762. AGLOBAL void timing(void);
  763. AGLOBAL void titlescreen(void);
  764. AGLOBAL void turborender(void);
  765. AGLOBAL void waitasec(void);
  766.  
  767. AGLOBAL void cleanexit(SLONG rc);
  768. AGLOBAL void draw(SBYTE x, SBYTE y, UBYTE image);
  769. AGLOBAL void effect(SBYTE index);
  770. AGLOBAL void fileopen(ABOOL revert);
  771. AGLOBAL void filesaveas(ABOOL flag);
  772. AGLOBAL void flash(ULONG where);
  773. AGLOBAL void rundown(SBYTE player);
  774. AGLOBAL void say(STRPTR sentence, COLOUR colour);
  775. AGLOBAL void stat(SBYTE player, SBYTE line);
  776. AGLOBAL void stopfx(void);
  777. AGLOBAL void ReadAdapterJoystick(UBYTE unit);
  778. AGLOBAL void ReadStandardJoystick(ULONG port);
  779. AGLOBAL void ReadGamepads(void);
  780.  
  781. AGLOBAL ABOOL anykey(ABOOL timeout);
  782. AGLOBAL ABOOL verify(void);
  783. AGLOBAL ABOOL ZOpen(STRPTR fieldname, ABOOL write);
  784. AGLOBAL ABOOL ZRead(STRPTR IOBuffer, ULONG length);
  785. AGLOBAL ABOOL ZWrite(STRPTR IOBuffer, ULONG length);
  786. AGLOBAL ABOOL ZClose(void);
  787.  
  788. AGLOBAL void help(UBYTE type);
  789. AGLOBAL void helpabout(void);
  790. AGLOBAL void helploop(UBYTE type);
  791. AGLOBAL void toggle(SBYTE key);
  792. AGLOBAL void filedelete(void);
  793.  
  794. // fe.c
  795. AGLOBAL void fieldedit(void);
  796. AGLOBAL void setbrush(UBYTE newbrush);
  797.  
  798. // squares.c
  799. AGLOBAL void draw(SBYTE x, SBYTE y, UBYTE image);
  800.  
  801. // tails.c
  802. AGLOBAL void drawtail(SBYTE x, SBYTE y, UBYTE image);
  803.  
  804. /* PUBLIC STRUCTURES ------------------------------------------------------ */
  805.  
  806. AGLOBAL struct HiScoreStruct
  807. {   SBYTE player, level;
  808.     ULONG score;                /* the score itself */
  809.     TEXT  name[NAMELENGTH + 2];    /* name of the player */
  810.     ABOOL fresh;                /* is the entry new? */
  811.     TEXT  date[DATELENGTH + 1],    /* date of achievement */
  812.           time[TIMELENGTH + 1];    /* time of achievement */
  813. };
  814. AGLOBAL struct WormStruct
  815. {   SBYTE  x, y, deltax, deltay, position, posidir, victor,
  816.            statx, staty, pos, levelreached, arrowy, olddeltax, olddeltay,
  817.            numbers;
  818.     ABOOL  affixer, brakes, encloser, remnants, alive, moved, pusher,
  819.            sideshot, flashed, rammed, frosted;
  820.     UBYTE  speed, control, cause, last, multi, power;
  821.     SWORD  armour, ammo, bias, cutter, lives, glow;
  822.     ULONG  score, oldscore, hiscore, dynamitescore, causewait, port;
  823.     TEXT   name[NAMELENGTH + 1];
  824.     COLOUR colour, dimcolour;
  825. };
  826. AGLOBAL struct TeleportStruct
  827. {   SBYTE x, y;
  828.     ABOOL alive;
  829. };
  830.  
  831. /* Must have blank line at EOF. */
  832.